require "fileutils"

output_path = "./output/"
picture_bed_path = "./"
blog_path = "../UIImage.com/blog/"
blog_out_path = "/assets/blog/"

replace_text = /https:\/\/gitee.com\/SourceKim\/PictureBed\/raw\/master\/\w+\//

FileUtils.rm_rf output_path

picture_bed_content = Dir.glob(picture_bed_path + "*/*.*")

# 创建一个 map，key 是图片名（带后缀），value 是图片文件的路径
pb_filenames = {}
picture_bed_content.map do |file|
    name = File.basename(file)
    pb_filenames[name] = file
end

blog_mds = Dir.glob(blog_path + "**/*.md")

pb_filenames.each do |name, img_path| # 遍历图片

    corresponding_md = nil # 记录这张图片被使用的「第一个」markdown 文件

    # 1. 遍历 markdown 文件
    blog_mds.each do |md_path| 

        next if corresponding_md # 找到了就不必继续了

        # 2. 找出含有图片名的 markdown
        did_include_img = File.readlines(md_path).any? { |line| line.include? name }

        if did_include_img
            corresponding_md = md_path
            md_name = File.basename(corresponding_md, ".md")

        end
    
    end

    # 3. 如果能找到图片对应的 markdown 文件，就把图片 copy 到以 markdown 文件名命名的文件夹
    if corresponding_md
        md_name = File.basename(corresponding_md, ".md")
        dest = output_path + md_name
        FileUtils.mkdir_p dest unless File.exist? dest # 先创建一下要 copy 的 destination 目录

        FileUtils.cp img_path, dest
    else # 没找到对应 markdown 的 case
        puts "File not found of any markdown: #{img_path}"
    end
end


# 接下来要替换一下 markdown 的文本了

# blog_mds.each do |md|
#     md_name = File.basename(md, "md") # 找到文件名
#     # output_md_dir = output + md_name + "/" # 找到这个 markdown 对应 output 的文件夹
#     # next unless File.exist? output_md_dir # 文件夹不存在就跳过

#     File.readlines(md).each do |line|
#         next unless line.include？ replace_text # 不需要被替换就跳过
#         line.gsub(replace_text, "assets/#{md_name}")
#     end
# end

blog_mds.each do |md|
    md_name = File.basename(md, ".md") # 文件名
    replaced_content = File.read(md).gsub(replace_text, blog_out_path + md_name + "/")
    File.open(md, "w") { |f| f << replaced_content }
end